/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package SessionBeans;

import Carrito.ProductoCantidad;
import Entidades.*;
import java.util.ArrayList;
import javax.ejb.LocalBean;
import javax.ejb.Stateful;

/**
 *
 * @author javi
 */
@Stateful
@LocalBean
public class CarritoDAO {

    private int idLog = 0;
    private ProductosDAO productosDAO = null;
    private ArrayList<ProductoCantidad> productos = new ArrayList<ProductoCantidad>();

    public void addProducto(Producto producto, int cantidad) {
        boolean x = false;
        if (cantidad > 0) {
            if (productos.isEmpty()) {
                this.productos.add(new ProductoCantidad(producto, cantidad));
            } else {
                for (ProductoCantidad miLista : productos) {
                    if (miLista.getProducto().getId() == producto.getId()) {
                        miLista.setCantidad(cantidad);
                        x = true;
                    }
                }
                if (!x) {
                    this.productos.add(new ProductoCantidad(producto, cantidad));
                }
            }
        }
    }

    public String persistir(Cliente c, int estado, int formaPago, PedidosDAO pedidosDAO, ProductosDAO productosDAO, RelacionesDAO relacionesDAO) {

       this.productosDAO = productosDAO;
        
        String msj = "";
        Pedido p = new Pedido();
        p.setCliente(c);
        p.setEstado(estado);
        p.setFormapago(formaPago);
        p.setPrecio(0);
        p.setRelacionList(null);
        pedidosDAO.insertar(p);
        p = pedidosDAO.getUltimoPedido();

        ArrayList<Relacion> relaciones = new ArrayList<Relacion>();
        Relacion r;
        RelacionPK rpk;

        double cantidad = 0;
        Producto producto;
        for (ProductoCantidad pc : productos) {
            int id_prod = pc.getProducto().getId();
            producto = productosDAO.getProducto(id_prod);
            r = new Relacion();
            rpk = new RelacionPK();
            cantidad += producto.getPrecio() * pc.getCantidad();

            msj = "El pedido ha sido realizado con éxito.";
            int resta = producto.getStock() - pc.getCantidad();
            producto.setStock(resta);
            if (producto.getStock() < 0) {
                producto.setStock(0);
                p.setEstado(5);
                pedidosDAO.insertar(p);
                msj += " La entrega se realizará en tres semanas.";
            }


            r.setCantidad(pc.getCantidad());
            r.setPedido1(p);
            r.setProducto1(producto);
            rpk.setPedido(p.getId());
            rpk.setProducto(producto.getId());
            r.setRelacionPK(rpk);
            relacionesDAO.insertar(r);
            relaciones.add(r);
        }
        if (formaPago == 0) {
            cantidad += 5;
        }
        p.setPrecio(cantidad);
        p.setRelacionList(relaciones);
        pedidosDAO.actualizar(p);
        this.productos = new ArrayList<ProductoCantidad>();

        return msj;
    }

    public int getIdLog() {
        return idLog;
    }

    public void setIdLog(int idLog) {
        this.idLog = idLog;
    }

    public ArrayList<ProductoCantidad> getProductos() {
        return productos;
    }

    public void setProductos(ArrayList<ProductoCantidad> productos) {
        this.productos = productos;
    }

    public Double calcularTotal() {

        Double total = 0.0;
        for (ProductoCantidad misCosas : productos) {
            int cant = misCosas.getCantidad();
            Double precio = misCosas.getProducto().getPrecio();
            total += (cant * precio);
        }
        return (total);
    }

    public void borrar(Producto producto) {
        boolean borrado = false;
        for (int i = 0; i < productos.size() && !borrado; i++) {
            if (productos.get(i).getProducto().getId() == producto.getId()) {
                borrado = true;
                productos.remove(i);
            }
        }
    }
}
